home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / wais / x / scommands.c < prev    next >
C/C++ Source or Header  |  1995-05-09  |  5KB  |  197 lines

  1. /* WIDE AREA INFORMATION SERVER SOFTWARE:
  2.    No guarantees or restrictions.  See the readme file for the full standard
  3.    disclaimer.
  4.  
  5.    This is part of the X user-interface for the WAIS software.  Do with it
  6.    as you please.
  7.  
  8.    jonathan@Think.COM
  9.  
  10.  *
  11.  * $Log:    scommands.c,v $
  12.  * Revision 1.8  92/04/28  15:30:17  jonathan
  13.  * Cleaned up use of scrollists.
  14.  * 
  15.  * Revision 1.7  92/03/17  14:17:00  jonathan
  16.  * Generally cleaned up.
  17.  * 
  18. */
  19.  
  20. #ifndef lint
  21. static char *RCSid = "$Header: /tmp_mnt/net/quake/proj/wais/wais-8-b5/x/RCS/scommands.c,v 1.8 92/04/28 15:30:17 jonathan Exp $";
  22. #endif
  23.  
  24. #define _C_SCOMMANDS
  25. #define XWAIS
  26. #include "xwais.h"
  27.  
  28. static Boolean editting_new_source;
  29. int last_source = NO_ITEM_SELECTED;
  30.  
  31. Source edit_source = NULL;
  32.  
  33. int get_selected_source()
  34. {
  35.   return(get_selected_item(sourcewindow->ListWidget));
  36. }
  37.  
  38. /* widget commands */
  39.  
  40. /* ARGSUSED */
  41. void
  42. EditSource(w, closure, call_data)
  43. Widget w;
  44. XtPointer closure, call_data;
  45. {
  46.   SList s;
  47.   char msg[1000];
  48.   int CurrentSource;
  49.  
  50.   double_click = FALSE;
  51.   LastClicked = w;
  52.  
  53.   if ((CurrentSource = get_selected_source())
  54.       != NO_ITEM_SELECTED) {
  55.     if (last_source == CurrentSource) {
  56.       if(edit_source == NULL) 
  57.     edit_source = (Source)s_malloc(sizeof(_Source));
  58.  
  59.       if(!ReadSourceFile(edit_source, 
  60.              Source_items[CurrentSource],
  61.              app_resources.userSourceDirectory))
  62.     ReadSourceFile(edit_source, 
  63.                Source_items[CurrentSource],
  64.                app_resources.commonSourceDirectory);
  65.  
  66.       sprintf(msg, "Opening source: %s\n", edit_source->name);
  67.       XwaisPrintf(msg);
  68.       PopupSource(edit_source);
  69.     }
  70.     else last_source = CurrentSource;
  71.   } 
  72.   else {
  73.     last_source = -1;
  74.     XwaisPrintf("No source selected.\nPlease selected one and try again.\n");
  75.   }
  76. }
  77.  
  78. /* ARGSUSED */
  79. void
  80. AddSource(w, closure, call_data)
  81. Widget w;
  82. XtPointer closure, call_data;
  83. {
  84.   static Source new = NULL;
  85.  
  86.   double_click = FALSE;
  87.   LastClicked = w;
  88.  
  89.   if(new == NULL) {
  90.     if((new = (Source) s_malloc(sizeof(_Source))) == NULL) {
  91.       fprintf(stderr, "Unable to allocate new source structure.\n");
  92.       exit(1);
  93.     }
  94.   }
  95.   editting_new_source = TRUE;
  96.   new->name = s_strdup("new.src");
  97.   new->directory = s_strdup(app_resources.userSourceDirectory);
  98.   strncpy(new->server, "localhost", STRINGSIZE);
  99.   strncpy(new->service, "8000", STRINGSIZE);
  100.   strncpy(new->database, "database_name", STRINGSIZE);
  101.   new->maintainer = s_strdup("");
  102.   new->description = s_strdup("");
  103.   edit_source = new;
  104.   XwaisPrintf("Opening new source\n");
  105.   PopupSource(new);
  106. }
  107.  
  108. void PopupSource(s)
  109. Source s;
  110. {
  111.   Arg arglist[10];
  112.   Cardinal num_args;
  113.  
  114.   if (s != NULL) {
  115.     num_args = 0;
  116.     XtSetArg(arglist[num_args], XtNtitle, s->name); num_args++;
  117.     XtSetValues(sourcepopup, arglist, num_args);
  118.     ReplaceText(snamewid, s->name);
  119.     ReplaceText(serverwid, s->server);
  120.     ReplaceText(servicewid, s->service);
  121.     ReplaceText(dbwid, s->database);
  122.     ReplaceText(costwid, s->cost);
  123.     ReplaceText(unitwid, s->units);
  124.     ReplaceText(maintainerwid, s->maintainer);
  125.     ReplaceText(descwid, s->description);
  126.     XtPopup(sourcepopup, XtGrabNone);
  127.   }
  128. }
  129.  
  130. /* ARGSUSED */
  131. void CloseSourceEdit(w, closure, call_data)
  132. Widget w;
  133. XtPointer closure, call_data;
  134. {
  135.   char name[STRINGSIZE];
  136.   Source source;
  137.  
  138.   double_click = FALSE;
  139.   LastClicked = w;
  140.  
  141.   if (editting_new_source == TRUE) {
  142.     editting_new_source = FALSE;
  143.   } 
  144.   source = edit_source;
  145.   if (source != NULL) {
  146.     strcpy(name, GetString(snamewid));
  147.  
  148.     if(!((strlen(name) > 4) && 
  149.      strstr(name, ".src") &&
  150.      (!strcmp(".src", strstr(name, ".src")))))
  151.       strcat(name, ".src");
  152.  
  153.     if(source->name != NULL) s_free(source->name);
  154.     source->name = s_strdup(name);
  155.  
  156.     if (source->maintainer != NULL) s_free(source->maintainer);
  157.     source->maintainer = s_strdup(GetString(maintainerwid));
  158.  
  159.     if (source->description != NULL) s_free(source->description);
  160.     source->description = s_strdup(GetString(descwid));
  161.  
  162.     strncpy(source->server, GetString(serverwid), STRINGSIZE);
  163.     strncpy(source->service, GetString(servicewid), STRINGSIZE);
  164.     strncpy(source->database, GetString(dbwid), STRINGSIZE);
  165.     strncpy(source->cost, GetString(costwid), STRINGSIZE);
  166.     strncpy(source->units, GetString(unitwid), STRINGSIZE);
  167.  
  168.     WriteSource(app_resources.userSourceDirectory, source, TRUE);
  169.  
  170.     /* ScanDirs(NULL, NULL);*/
  171.   }
  172.   else XwaisPrintf("No currently selected source.  This shouldn't happen.\n");
  173.   edit_source = NULL;
  174.   XtPopdown(sourcepopup);
  175. }
  176.  
  177. /* ARGSUSED */
  178. void CancelSourceEdit(w, closure, call_data)
  179. Widget w;
  180. XtPointer closure, call_data;
  181. {
  182.   SList s;
  183.  
  184.   double_click = FALSE;
  185.   LastClicked = w;
  186.  
  187.   if (editting_new_source == TRUE) {
  188.     s = Sources;
  189.     editting_new_source = FALSE;
  190.     FreeSource(Sources->thisSource);
  191.     Sources = Sources->nextSource;
  192.     s_free(s);
  193.   }
  194.   XtPopdown(sourcepopup);
  195.   edit_source = NULL;
  196. }
  197.